#include <bits/stdc++.h>
using namespace std;
const int N = 105;
double a[N][N], x[N];
const double eps = 1e-6;
/**
 *
 * @param n 系数矩阵行数
 * @param m 系数矩阵列数
 * @return -1: 无解; 0: 有唯一解; 正整数: 自由元个数
 */
int gauss(int n, int m) {
  int c = 0, r = 0;
  for (; r < n && c < m; ++r, ++c) {
    int maxr = r;
    for (int i = r + 1; i < n; ++i)
      if (abs(a[i][c]) > abs(a[maxr][c])) maxr = i;
    if (maxr != r) swap(a[r], a[maxr]);
    if (abs(a[r][c]) < eps) {  // 该行已经为 0
      r--;
      continue;  // 处理右边一列
    }
    for (int i = r + 1; i < n; ++i) {
      if (abs(a[i][c]) > eps) {  // 非 0，开始消元
        double k = a[i][c] / a[r][c];
        for (int j = c; j < m + 1; ++j) a[i][j] -= a[r][j] * k;
        a[i][c] = 0;
      }
    }
  }
  for (int i = r; i < m; ++i) {
    if (abs(a[i][c]) > eps) return -1;
  }
  if (r < m) return m - r;
  for (int i = m - 1; i >= 0; --i) {
    for (int j = i + 1; j < m; ++j) a[i][m] -= a[i][j] * x[j];
    x[i] = a[i][m] / a[i][i];
  }
  return 0;
}
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < n + 1; ++j) cin >> a[i][j];
  int res = gauss(n, n);
  if (res != 0)
    puts("No Solution");
  else {
    for (int i = 0; i < n; ++i) printf("%.2lf\n", x[i]);
  }
}
